<?php
    // 数据库连接
    function connect($host=DB_HOST, $user=DB_USER, $password=DB_PASSWORD, $database=DB_DATABASE, $port=DB_PORT){
        $link = @mysqli_connect($host, $user, $password, $database, $port);
        // 判断是否链接成功
        if(mysqli_connect_errno()){
            // 链接失败输出错误信息
            exit(mysqli_connect_error());
        }
        // 设置默认的客户端字符编码
        mysqli_set_charset($link, 'utf8');

        // 返回链接数据库对象
        return $link;
    }

    // 执行一条SQL语句，返回结果集对象，或者返回布尔值
    function execute($link, $query){
        $result = mysqli_query($link, $query);
        if(mysqli_errno($link)){
            exit(mysqli_error($link));
        }
        return $result;
    }

    // 执行一条SQL语句，只返回布尔值
    function execute_bool($link, $query){
        $bool = mysqli_real_query($link, $query);
        if(mysqli_errno($link)){
            exit(mysqli_error($link));
        }
        return $bool;
    }


    // 一次性执行多条SQL语句
    // $arr_sqls：数组形式的多条SQL语句
    // $error：传入一个变量，里面会存储语句执行的错误信息
    /*
    $arr = array(
        'select * from kuse_father_module',
        'select * from kuse_father_module1',
        'select * from kuse_father_module1',
        'select * from kuse_father_module1'
    );
    var_dump(execute_multi($link, $arr, $error));
    echo $error;
    */
    function execute_multi($link, $arr_sqls, &$error){
        $sqls = implode(';', $arr_sqls).';';
        if(mysqli_multi_query($link, $sqls)){
            $data = array();
            $i = 0;
            do{
                if($result = mysqli_store_result($link)){
                    $data[$i] = mysqli_fetch_all($result);
                    mysqli_free_result($result);
                }else{
                    $data[$i] = null;
                }
                $i++;
                if(!mysqli_more_results($link)) break;
            }while (mysqli_next_result($link));
            if($i == count($arr_sqls)){
                return $data;
            }else{
                $error = "sql语句执行失败：<br>&nbsp;数组下标为{$i}的语句：{$arr_sqls[$i]}执行错误<br>&nbsp;错误原因：".mysqli_error($link);
                return false;
            }
        }else{
            $error = "执行失败！请检查首条语句是否正确！<br>可能的错误原因：".mysqli_error($link);
            return false;
        }
    }

    // 获取记录数(行数)
    function num($link, $sql_count){
        $result = execute($link, $sql_count);
        $count = mysqli_fetch_row($result);
        return $count[0];
    }

    // 数据入库之前进行转义，确保数据能够顺利入库
    function escape($link, $data){
        if(is_string($data)){
            return mysqli_real_escape_string($link, $data);
        }
        if(is_array($data)){
            foreach ($data as $key => $val){
                $data[$key] = escape($link, $val);
            }
        }
        return $data;
    }

    // 关闭数据库的链接
    function close($link){
        // 如果向函数里面传递的是对象，那么并不是把对象复制一份传给函数，
        // 而是直接传递的这个对象本身（相当于引用传递）
        mysqli_close($link);
    }
?>